home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / HARDWARE / IICALARM / !iicAlarm / IIC-Bus < prev    next >
Text File  |  1994-04-26  |  7KB  |  165 lines

  1.  
  2. IIC-Bus im Archimedes
  3. ---------------------
  4.  
  5.  
  6. # Der IIC-Bus (Internal IC-Bus) ist ein serieller Bus, über welchen mehrere
  7.   IC's vernetzt werden können. Sie benötigen nur 3 Leitungen:
  8.   Masse, Data-Clock und Data.
  9. # Die Clock und Datenleitung sind als Open Collector ausgelegt und dadurch
  10.   Bi-Direktional und vernetzbar.
  11. # Taktraten für IIC-Bausteine liegen bei 2kHz, typische Bausteine können
  12.   jedoch bis 100kHz getacktet werden.
  13. # Das Protokoll der Kommunikation besteht aus:
  14.   + Start-Marke
  15.   + Baustein-Adresse
  16.   + Read/Write-Signal
  17.   + Acknowledge vom Slave
  18.   + Word-Adresse im Slave
  19.   + Daten-Worte
  20.   + Stop-Marke
  21. # 3 verschiedene Protokolle:
  22.   a) WRITE-MODE
  23.   : Start-Marke
  24.   : Baustein-Adresse (Slave address) und Write-Mode (=0)
  25.   : Acknowledge vom Slave
  26.   : Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
  27.   : Acknowledge vom Slave
  28.   : Daten zum Slave
  29.   : Acknowledge vom Slave, Slaveinterne Adresse wird automatisch erhöht.
  30.   :  weitere Daten mit Acknowledge.....
  31.   : Stop-Marke
  32.  
  33.     .-.--------------.-.-.--------------.-.--------------.-.-.
  34.     |S|Slave address  0|A| Word address |A|     Data     |A|P|
  35.     '-'--------------'-'-'--------------'-'--------------'-'-'
  36.        \__8 Bit-word__/   \_8 Bit-word_/   \_8 Bit-word_/
  37.       0=Read, 1=Write "                   \___Loop of n____/
  38.  
  39.   b) WRITE word address; READ data
  40.   : Start-Marke
  41.   : Baustein-Adresse (Slave address) und Write-Mode (=0)
  42.   : Acknowledge vom Slave
  43.   : Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
  44.   : Acknowledge vom Slave
  45.   : Start-Marke
  46.   : Baustein-Adresse (Slave address) und Read-Mode (=1)
  47.   : Acknowledge vom Slave; Slave wird Slave-Transmitter.
  48.   : Daten vom Slave
  49.   : Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
  50.   :  weitere Daten mit Acknowledge.....
  51.   :  nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
  52.   : Stop-Marke
  53.  
  54.     .-.--------------.-.-.--------------.-.   
  55.     |S|Slave address  0|A| Word address |A| 
  56.     '-'--------------'-'-'--------------'-'
  57.        \__8 Bit-word__/   \_8 Bit-word_/
  58.       0=Read, 1=Write "
  59.  
  60.     .-.--------------.-.-.--------------.-.       .--------------.-.-.
  61.     |S|Slave address  1|A|     Data     |A|.......|     Data     |1|P|
  62.     '-'--------------'-'-'--------------'-'       '--------------'-'-'
  63.        \__8 Bit-word__/   \_8 Bit-word_/
  64.       0=Read, 1=Write "  \___Loop of n____/   .... last Byte......|
  65.  
  66.   c) Direct Read
  67.   : Start-Marke
  68.   : Baustein-Adresse (Slave address) und Read-Mode (=1)
  69.   : Acknowledge vom Slave
  70.   : Daten vom Slave
  71.   : Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
  72.   :  weitere Daten mit Acknowledge.....
  73.   :  nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
  74.   : Stop-Marke
  75.  
  76.     .-.--------------.-.-.--------------.-.       .--------------.-.-.
  77.     |S|Slave address  1|A|     Data     |A|.......|     Data     |1|P|
  78.     '-'--------------'-'-'--------------'-'       '--------------'-'-'
  79.        \__8 Bit-word__/   \_8 Bit-word_/
  80.       0=Read, 1=Write "  \___Loop of n____/   .... last Byte......|
  81.  
  82. # Slave address ist eine Bauteile-Kennung zur Identifizierung eines IC's.
  83.   Sie wird im Bauteil festgelegt.
  84.   Bei einigen Bausteinen kann durch eine Adress-Leitung diese Kennung
  85.   verändert werden.
  86. # Word address ist eine Bauteilinterne 8 Bit Adresse über welche die
  87.   gewünschte Funktion abgerufen werden kann.
  88. # Archimedes IC's:
  89.   + PCF8583, RAM, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
  90.     Slave address:    .---.---.---.---.---.---.---.---.
  91.                       | 1 | 0 | 1 | 0 | 0 | 0 |A0 |R/W|
  92.                       '---'---'---'---'---'---'---'---'
  93.   + PCF8573, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
  94.     Slave address:    .---.---.---.---.---.---.---.---.
  95.                       | 1 | 1 | 0 | 1 | 0 |A1 |A0 |R/W|
  96.                       '---'---'---'---'---'---'---'---'
  97.  
  98. # Archimedes Routinen für den Zugriff auf diese Bausteine:
  99.   + Zur Unterstützung des Uhrenbausteins gibt es diverse Funktionen, um die
  100.     Zeit oder den Ram zu lesen und zu schreiben.
  101.     . OS_Word 14,1   -- Uhr lesen, PRM.562
  102.     . OS_Word 15,8   -- Zeit schreiben, PRM.566
  103.     . OS_Word 15,15  -- Datum schreiben, PRM.567
  104.     . OS_Word 15,24  -- Uhr schreiben, PRM.569
  105.     . OS_Byte 161    -- Read CMOS RAM, PRM.787
  106.     . OS_Byte 162    -- Write CMOS RAM, PRM.788
  107.     Mit den Ram-Funktionen ist es nicht möglich alle 256 Adressen zu
  108.     bearbeiten. Die Daten der Uhr (16 Bytes) sind nicht direkt erreichbar.
  109.   + Zur Unterstützung allgemeiner IIC-Bausteine gibt es eine Funktion die
  110.     die Kommunikation problemlos übernimmt.
  111.     . IIC_Control    -- bearbeiten von IIC-Devices, PRM.824
  112.     Diese Funktion ist schlecht erklärt und sogar mit einem Druckfehler
  113.     behaftet. Das Read/Write-Signal ist genau umgekehrt.
  114.     Sie übernimmt die komplette Kommunikation.
  115.     Man muß lediglich beachten, daß beim schreiben die erste Date als
  116.     Bauteil-interne Adresse interpretiert wird. Das Stop-Bit wird nie
  117.     gesendet. Anwählen einer bestimmten Adresse ist also möglich durch
  118.     schreiben eines Blockes der Länge 1. Der interne Adresszähler im
  119.     Baustein zählt ja nach jedem Zugriff um eins aufwärts.
  120.     Siehe auch die Protokoll-Diagramme weiter oben.
  121.  
  122. # Das Mapping der CMOS-Ram-Funktion weicht von der Hardware ab.
  123.   Die Routine "PROCiicMAP" in IICTest stellt eine Adresstabelle auf
  124.   und gibt sie mit der RAM-lese-Funktion aus.
  125.   d.h. Wir beschreiben jedes Byte mit seiner Adresse
  126.  
  127.   Wir lesen mit der normalen CMosRamleseRoutine:
  128.    0:  40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
  129.   10:  50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
  130.   20:  60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
  131.   30:  70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
  132.   40:  80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
  133.   50:  90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
  134.   60:  A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
  135.   70:  B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
  136.   80:  C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
  137.   90:  D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
  138.   A0:  E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
  139.   B0:  F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
  140.   C0:  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
  141.   D0:  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
  142.   E0:  30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
  143.   F0:   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  <-- Uhr
  144.  
  145.   Jetzt lesen wir mit der IIC-Block-Routine:
  146.    0:   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  <-- Uhr
  147.   10:  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
  148.   20:  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
  149.   30:  30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
  150.   40:  40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
  151.   50:  50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
  152.   60:  60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
  153.   70:  70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
  154.   80:  80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
  155.   90:  90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
  156.   A0:  A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
  157.   B0:  B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
  158.   C0:  C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
  159.   D0:  D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
  160.   E0:  E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
  161.   F0:  F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
  162.   Der IIC-Block ist das "Original" mit einer linearen Adressierbarkeit
  163.   über 256 Adressen.
  164.  
  165.